#include <iostream>
#include <cstring>
using namespace std;


int n,m;
int dist[27][27];
int edge[27][27];
int st[27];
void floyd(){
	memcpy(dist,edge,sizeof(dist));
	for(int k=0;k<n;k++)
	{
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<n;j++)
			{
				dist[i][j]|=dist[i][k] && dist[k][j];
			}
		}
	}
}
int check()
{
	for(int i=0;i<n;i++)
		if(dist[i][i])
			return 2;
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<i;j++)
		{
			if(!dist[i][j] && !dist[j][i])
			{
				return 0;
			}
		}
	}
	return 1;
}
char get_min()
{
	for(int i=0;i<n;i++)
	{
		if(st[i])	
			continue;
		bool flg=true;
		for(int j=0;j<n && flg;j++)
		{
			if(st[j])	
				continue;
			if(dist[j][i])
				flg=false;
		}
		if(flg)
		{
			st[i]=1;
			return i+'A';
		}
	}
}
int main()
{
	while(cin>>n>>m && (n||m))
	{
		int type=0;
		int pos=0;
		memset(edge,0,sizeof(edge));
		for(int i=1;i<=m;i++)
		{
			string s;
			cin>>s;
			int x=s[0]-'A';
			int y=s[2]-'A';
			if(!type){
				edge[x][y]=1;
				floyd();
				type=check();
				if(type)
				{
					pos=i;
				}
			}
		}
		if(type==1)
		{
			memset(st,0,sizeof(st));
			printf("Sorted sequence determined after %d relations: ",pos);
			for(int i=0;i<n;i++)
			{
				cout<<get_min();
			}
			cout<<"."<<endl;
			
		}
		else if(type==0)
		{
			cout<<"Sorted sequence cannot be determined."<<endl;
		}
		else{
			printf("Inconsistency found after %d relations.\n",pos);
		}
	}
	
	return 0;
	
}
